﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
using GestorDeFlotasDesktop.Classes;

namespace GestorDeFlotasDesktop.AbmAuto
{
    public partial class NuevoTaxi : Form
    {
        private Boolean alta;
        //private int codigoTaxiParaModificar;
        private Auto taxiParaModificacion;

        public NuevoTaxi()
        {
            InitializeComponent();
            populateMarca();
            populateReloj();
            alta = true;
        }

        public NuevoTaxi(Auto taxi)
        {
            InitializeComponent();
            populateMarca();
            populateReloj();
            alta = false;
            taxiParaModificacion = taxi;
            populateFields(taxi);
        }

        private void populateMarca()
        {
            SqlInterface.Conectar();
            SqlDataReader MarcaReader = SqlInterface.ExecuteReader(
                "SELECT DISTINCT TAXI_MARCA FROM SQUIRTLE.TAXI", CommandType.Text);

            List<String> listaMarcas = new List<string>();
            while (MarcaReader.Read())
            {
                listaMarcas.Add(MarcaReader.GetString(MarcaReader.GetOrdinal("TAXI_MARCA")));
            }
            cmbMarca.DataSource = listaMarcas;
            SqlInterface.Desconectar();
        }

        private void populateReloj()
        {
            SqlInterface.Conectar();
            SqlDataReader RelojReader = SqlInterface.ExecuteReader(
                "SELECT DISTINCT RELOJ_CODIGO,RELOJ_NROSERIE FROM SQUIRTLE.RELOJ WHERE RELOJ_HABILITADO=1", CommandType.Text);

            List<Reloj> listaRelojes = new List<Reloj>();
            while (RelojReader.Read())
            {
                Reloj reloj = new Reloj();
                reloj.intReloj = RelojReader.GetInt32(RelojReader.GetOrdinal("RELOJ_CODIGO"));
                reloj.strNroSerie = RelojReader.GetString(RelojReader.GetOrdinal("RELOJ_NROSERIE"));
                listaRelojes.Add(reloj);
            }
            listaRelojes.Insert(0, crearRelojVacio());
            cmbReloj.DataSource = listaRelojes;
            cmbReloj.DisplayMember = "strNroSerie";
            cmbReloj.ValueMember = "intReloj";
            SqlInterface.Desconectar();
        }

        private Reloj crearRelojVacio()
        {
            Reloj reloj = new Reloj();
            reloj.strNroSerie = "(Ninguno)";
            return reloj;
        }

        private void populateFields(Auto taxi)
        {
            txtModelo.Text = taxi.strModelo;
            txtLicencia.Text = taxi.strLicencia;
            txtPatente.Text = taxi.strPatente;
            txtRodado.Text = taxi.strRodado;
            chkHabilitado.Checked = taxi.blnHabilitado;
            int index = cmbMarca.FindStringExact(taxi.strMarca);
            cmbMarca.SelectedIndex = index;
            index = cmbReloj.FindStringExact(taxi.strRelojNroSerie);
            cmbReloj.SelectedIndex = index;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (txtLicencia.Text == "" || txtModelo.Text == "" || txtPatente.Text == "" || txtRodado.Text == "" || cmbReloj.SelectedIndex == 0)
            {
                MessageBox.Show("Todos los campos son obligatorios. Por favor, complételos antes de continuar.");
                return;
            }

            List<SqlParameter> Parameters = new List<SqlParameter>();
            Parameters.Add(new SqlParameter("@Marca",cmbMarca.GetItemText(this.cmbMarca.SelectedItem)));
            Parameters.Add(new SqlParameter("@Modelo",txtModelo.Text.Length > 0 ? txtModelo.Text : ""));
            Parameters.Add(new SqlParameter("@Patente",txtPatente.Text.Length > 0 ? txtPatente.Text : ""));
            Parameters.Add(new SqlParameter("@Licencia",txtLicencia.Text.Length > 0 ? txtLicencia.Text : ""));
            Parameters.Add(new SqlParameter("@Rodado",txtRodado.Text.Length > 0 ? txtRodado.Text : ""));
            Parameters.Add(new SqlParameter("@Reloj",cmbReloj.GetItemText(cmbReloj.SelectedValue)));

            SqlInterface.Conectar();
            int result;

            if (alta == true)
            {
                try
                {
                    result = SqlInterface.ExecuteNonQuery("SQUIRTLE.spAltaTaxi", CommandType.StoredProcedure, Parameters);
                }
                catch (SqlException sqlEx)
                {
                    MessageBox.Show(sqlEx.Message);
                    SqlInterface.Desconectar();
                    return;
                }
            }
            else
            {
                Parameters.Add(new SqlParameter("@Codigo", taxiParaModificacion.intCodigo));
                Parameters.Add(new SqlParameter("@Habilitado", chkHabilitado.Checked));
                result = SqlInterface.ExecuteNonQuery("SQUIRTLE.spModificarTaxi", CommandType.StoredProcedure, Parameters);

                if (!taxiParaModificacion.strRelojNroSerie.Equals(cmbReloj.GetItemText(this.cmbReloj.SelectedItem)))
                {
                    Parameters.Clear();
                    Parameters.Add(new SqlParameter("@taxi", taxiParaModificacion.intCodigo));
                    Parameters.Add(new SqlParameter("@reloj", cmbReloj.GetItemText(cmbReloj.SelectedValue)));
                    SqlInterface.ExecuteNonQuery("SQUIRTLE.spBajaTaxiReloj", CommandType.StoredProcedure, Parameters);
                    SqlInterface.ExecuteNonQuery("SQUIRTLE.spAltaTaxiReloj", CommandType.StoredProcedure, Parameters);
                };
            }

            if (result == -1)
                MessageBox.Show("Ha habido un error al guardar el taxi. Verifique los datos e intentelo nuevamente");
            else
                MessageBox.Show("El taxi ha sido guardado con éxito.");

            Parameters.Clear();
            SqlInterface.Desconectar();
        }
    }
}
